// utils/request.js
import axios from 'axios';
import {showToast} from '@/utils/helper.js'


// axios.defaults.withCredentials = true; // 允许携带凭证
// 创建axios实例
const service = axios.create({
  baseURL: 'http://localhost:8081', // API的base_url
  method:'POST',
  timeout: 5000 ,// 请求超时时间
  headers:{
	  'Content-Type':'application/json;charset=utf-8'
  }
});

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 在发送请求前做些什么
    const token = uni.getStorageSync('token');
    if (token) {
      // 设置请求头中的 token
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    
	console.log("request pre:" + token)
    // 显示加载提示
    uni.showLoading({
      title: '加载中...',
      mask: true
    });
    
    return config;
  },
  error => {
    // 处理请求错误
    console.error('请求错误:', error);
    uni.hideLoading();
    showToast('请求失败，请稍后重试', 'error');
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  response => {
    uni.hideLoading();
    
    // 自定义业务状态码处理
    const res = response.data;
	console.log("请求返回数据：", res)
    if (res.code !== 200) {
      // 记录错误日志（可选）
      console.error('业务错误:', res.message);
      
      // 通用错误提示
      showToast(res.message || '请求失败', 'error');
      
      // 特殊错误处理
      switch (res.code) {
        case 401: // 未登录或token过期
          handleUnauthorized();
          break;
        case 403: // 权限不足
          uni.showModal({
            title: '权限不足',
            content: '您没有权限访问该资源',
            showCancel: false
          });
          break;
        case 500: // 服务器内部错误
          uni.showModal({
            title: '服务器错误',
            content: '服务器处理请求时发生错误，请稍后重试',
            showCancel: false
          });
          break;
        default:
          break;
      }
      
      return Promise.reject(new Error(res.message || '请求失败'));
    } else {
      return res.data;
    }
  },
  error => {
    uni.hideLoading();
    
    // 记录错误日志
    console.error('网络错误:', error);
    
    // 获取错误信息
    const errorInfo = error.response || {};
    const status = errorInfo.status || 'unknown';
    const message = error.message || '网络连接失败';
    
    // 根据HTTP状态码处理
    switch (status) {
      case 400:
        showToast('错误的请求参数', 'error');
        break;
      case 401:
        handleUnauthorized();
        break;
      case 403:
        showToast('权限不足，无法访问', 'error');
        break;
      case 404:
        showToast('请求的资源不存在', 'error');
        break;
      case 500:
        showToast('服务器内部错误', 'error');
        break;
      case 503:
        showToast('服务器暂时不可用', 'error');
        break;
      default:
        // 处理网络连接错误、超时等
        if (error.message.includes('timeout')) {
          showToast('请求超时，请稍后重试', 'error');
        } else if (error.message.includes('Network Error')) {
          showToast('网络连接失败，请检查网络设置', 'error');
        } else {
          showToast(message, 'error');
        }
        break;
    }
    
    return Promise.reject(error);
  }
);

// 处理未授权状态
function handleUnauthorized() {
  // 清除本地认证信息
  uni.removeStorageSync('token');
  uni.removeStorageSync('userInfo');
  
  // 跳转到登录页（可根据项目需求调整）
  const currentPages = getCurrentPages();
  const currentRoute = currentPages[currentPages.length - 1]?.route;
  
  // 如果当前不在登录页，则跳转到登录页
  if (currentRoute !== 'pages/index/login') {
    uni.navigateTo({
      url: '/pages/index/login'
    });
  }
}

export default service;